import { ref } from 'vue'
import { defineStore, acceptHMRUpdate } from 'pinia'
// 导入api接口
import api from '@/api'

export const useOptionDataStore = defineStore('optionData', () => {
  const optionApi = api.getApi('FaSysOption')
  // 选项数据池
  const optionDatas = ref({})
  // { [optionId]: { options: [], lastLoadTime: 1728703165451 } }
  // 选项列表
  // {options:[], lastLoadTime: 1728703165451}
  const options = ref({})

  // 刷新化选项列表
  function refreshOptions() {
    if (options.value?.lastLoadTime) {
      let timeDiff = new Date().getTime() - options.value.lastLoadTime
      if (timeDiff < 60000) {
        // console.log('重复获取选项数据(1分钟刷新一次)')
        return
      }
    }
    optionApi.list().then(
      (data) =>
        (options.value = {
          options: data.data,
          lastLoadTime: new Date().getTime()
        })
    )
    // console.log('刷新options成功')
  }
  // 新增选项数据
  async function add(optionId) {
    // 判断加载时间间隔是否超过10s
    let optionData = optionDatas.value[optionId]
    if (optionData?.options?.length > 0) {
      let timeDiff = new Date().getTime() - optionData.lastLoadTime
      if (timeDiff < 60000) {
        // console.log('重复获取选项数据(1分钟刷新一次) optionId: ', optionId)
        return optionData.options
      }
    }
    const data = await optionApi.getOptions(optionId)
    optionDatas.value[optionId] = {
      options: data.data,
      lastLoadTime: new Date().getTime()
    }
    // console.log('新增选项数据 optionId: ', optionId)
    return data.data
  }

  function load(cacheOptionDatas, cacheOptions) {
    optionDatas.value = cacheOptionDatas
    options.value = cacheOptions
  }
  // 清除
  function clear() {
    optionDatas.value = {}
    options.value = {}
  }

  return { optionDatas, options, add, load, refreshOptions, clear }
})
// 确保传递正确的 store 声明
if (import.meta.hot) {
  import.meta.hot.accept(acceptHMRUpdate(useOptionDataStore, import.meta.hot))
}
